package com.daniel.file;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

/**
 * @Description: 文件操作工具
 * @Author: sxgan
 * @Date: 2024-03-29 12:29
 * @Version: 1.0
 **/

public class FileTools {

    public static void main(String[] args) throws FileNotFoundException {
        //键盘录入一个文件夹路径
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个文件夹路径：");
        String path = sc.next();

        //获取文件
        File file = new File(path);
        HashMap<String, Integer> map = new HashMap<>();
        //调用方法获取结果集合
        map = getFileCount(file, map);
        //遍历输出集合
        getMapEle(map);
    }


    //获取到文件列表，循环判断是否为文件夹，如果是文件夹，递归继续执行方法，如果不是，分割文件名，存入集合
    private static HashMap<String, Integer> getFileCount(File file, HashMap<String, Integer> map) {

        File[] f = file.listFiles();
        for (File f2 : f) {
            if (f2.isFile()) {
                String fileName = f2.getName();
                //截取文件名，把文件名和后缀分开
                String[] ss = fileName.split("\\.");
                String fileEnd = ss[ss.length - 1];
                if (map.containsKey(fileEnd)) {
                    //判断如果集合中已存在，就在后面+1
                    map.put(fileEnd, map.get(fileEnd) + 1);
                } else {
                    //不存在设置第一次
                    map.put(fileEnd, 1);
                }


            } else {
                //递归，对文件夹继续调用方法
                getFileCount(f2, map);
            }
        }
        //返回结果值
        return map;
    }

    //遍历输出集合
    private static void getMapEle(HashMap<String, Integer> map) {
        //获取key值存进Set集合
        Set<String> set = map.keySet();
        //遍历循环
        for (String key : set) {
            Integer value = map.get(key);
            System.out.println(key + "=====" + value);
        }

    }
}
